//
// Created by dgy on 2022/11/6.
//
#include "iostream"
#include "vector"
using namespace std;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
    vector<int> goal;
    if(matrix.size()==0||matrix[0].size()==0){
        return goal;
    }
    int row=matrix.size();//有多少行
    int col=matrix[0].size();//有多少列
    //int t=0;
    //左上坐标位置
    int zsp1=0,zsp2=0;
    //右上坐标位置
    int ysp1=0,ysp2=col-1;
    //左下坐标位置
    int zxp1=row-1,zxp2=0;
    //右下坐标位置
    int yxp1=row-1,yxp2=col-1;
    while (zsp1<yxp1&&zsp2<yxp2){
        for(int i=zsp2;i<=ysp2;i++){
            goal.push_back(matrix[zsp1][i]);
            //t++;
        }
        for(int i=ysp1+1;i<=yxp1;i++){
            goal.push_back(matrix[i][ysp2]);
            //t++;
        }
        for(int i=yxp2-1;i>=zxp2;i--){
            goal.push_back(matrix[yxp1][i]);
            //t++;
        }
        for(int i=zxp1-1;i>zsp1;i--){
            goal.push_back(matrix[i][zxp2]);
            //t++;
        }
        zsp1++,zsp2++;
        ysp1++,ysp2--;
        zxp1--,zxp2++;
        yxp1--,yxp2--;
    }
    if(zsp1==yxp1&&zsp2!=yxp2){
        for(int i=zsp2;i<=yxp2;i++){
            goal.push_back(matrix[zsp1][i]);
        }
    }
    if(zsp2==yxp2){
        for(int i=zsp1;i<=yxp1;i++){
            goal.push_back(matrix[i][zsp2]);
        }
    }
    return goal;
}